/*
 * FrmCadProdutos.java
 *
 * Created on 23/07/2011, 11:22:07
 */
package siscom.frames;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import siscom.componentes.SisFrame;
import siscom.modelos.CategoriaProduto;
import siscom.util.Util;
import siscom.util.fontes.GerenciadorFontes;
import siscom.modelos.DAO.MarcaDAO;
import siscom.modelos.DAO.CategoriaProdutoDAO;
import siscom.modelos.DAO.ProdutoDAO;
import siscom.modelos.Marca;
import siscom.modelos.Produto;

/**
 *
 * @author Carlos Ribeiro
 */
public class FrmCadProdutos extends SisFrame {

    /** Creates new form FrmCadProdutos */
    public FrmCadProdutos() {
        initComponents();
        lblTitulo.setFont(GerenciadorFontes.getFonte().getFonteTitulo());
        setTitle("Cadastro de Produtos");


//        setTitulo("Cadastro de Produtos");
    }

    public static void main(String[] args) {
        Util.setLookAndFeel(null);
        new FrmCadProdutos().setVisible(true);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblTitulo = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();
        lblCodBarra = new javax.swing.JLabel();
        txtCodBarra = new siscom.componentes.SisTextField();
        lblDescricao = new javax.swing.JLabel();
        txtDescricao = new siscom.componentes.SisTextField();
        lblMarca = new javax.swing.JLabel();
        try {
            txtMarca = new siscom.componentes.AutoCompleteComboBox(new MarcaDAO().selecionarTodos(), true);
            lblCategoria = new javax.swing.JLabel();
            try {
                txtCategoria = new siscom.componentes.AutoCompleteComboBox(new CategoriaProdutoDAO().selecionarTodos(), true);
                lblPrecoCusto = new javax.swing.JLabel();
                txtPrecoCusto = new siscom.componentes.SisCampoValor();
                lblPrecoVenda = new javax.swing.JLabel();
                txtPrecoVenda = new siscom.componentes.SisCampoValor();
                jSeparator2 = new javax.swing.JSeparator();
                btnSalvar = new javax.swing.JButton();

                lblTitulo.setFont(new java.awt.Font("Segoe Print", 1, 20));
                lblTitulo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/siscom/icones/carton_64.png"))); // NOI18N
                lblTitulo.setText("Cadastro de Produtos");

                lblCodBarra.setText("Código Barras:");

                txtCodBarra.setApenasNumeros(true);
                txtCodBarra.setTamanhoMaximo(13);

                lblDescricao.setText("Descrição: ");

                txtDescricao.setTamanhoMaximo(60);
                txtDescricao.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        txtDescricaoActionPerformed(evt);
                    }
                });

                lblMarca.setText("Marca:");

            } catch(Exception e ) {
                Util.trataErro(e);
            }
            txtMarca.insertItemAt("", 0);
            txtMarca.setSelectedIndex(0);

            lblCategoria.setText("Categoria:");

        }
        catch(Exception e ) {
            Util.trataErro(e);
        }
        txtCategoria.insertItemAt("", 0);
        txtCategoria.setSelectedIndex(0);

        lblPrecoCusto.setText("Preço Custo: ");

        lblPrecoVenda.setText("Preço Venda: ");

        btnSalvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/siscom/icones/save_32.png"))); // NOI18N
        btnSalvar.setMnemonic('s');
        btnSalvar.setText("Salvar");
        btnSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalvarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblTitulo)
                .addContainerGap(728, Short.MAX_VALUE))
            .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 1024, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(lblMarca)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtMarca, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(lblCodBarra, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtCodBarra, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(26, 26, 26)
                        .addComponent(lblDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(txtDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, 379, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblCategoria, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtCategoria, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap(314, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblPrecoCusto)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtPrecoCusto, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(lblPrecoVenda)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtPrecoVenda, javax.swing.GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE)
                .addGap(616, 616, 616))
            .addComponent(jSeparator2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 1024, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnSalvar)
                .addContainerGap(933, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblTitulo)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblCodBarra)
                    .addComponent(txtCodBarra, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblDescricao)
                    .addComponent(txtDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblMarca)
                    .addComponent(txtMarca, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblCategoria)
                    .addComponent(txtCategoria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblPrecoCusto)
                    .addComponent(txtPrecoCusto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblPrecoVenda)
                    .addComponent(txtPrecoVenda, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(353, 353, 353)
                .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnSalvar)
                .addContainerGap(132, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void txtDescricaoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtDescricaoActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txtDescricaoActionPerformed

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalvarActionPerformed
        if (valida()) {
            try {
                Produto produto = new Produto();
                produto.setCodigoBarra(txtCodBarra.getText());
                produto.setDescricao(txtDescricao.getText());
                produto.setPrecoCompra(txtPrecoCusto.getValue());
                produto.setPrecoVenda(txtPrecoVenda.getValue());
                Marca marca;
                if (txtMarca.getSelectedItem() instanceof Marca) {
                    marca = (Marca) txtMarca.getSelectedItem();
                } else {
                    if (txtMarca.getSelectedItem().toString().isEmpty()) {
                        marca = null;
                    } else {
                        marca = new Marca();
                        marca.setMarca(txtMarca.getSelectedItem().toString());
                        new MarcaDAO().salvar(marca);

                    }
                }
                produto.setMarca(marca);

                CategoriaProduto categoria;
                if (txtCategoria.getSelectedItem() instanceof CategoriaProduto) {
                    categoria = (CategoriaProduto) txtCategoria.getSelectedItem();
                } else {
                    if (txtCategoria.getSelectedItem().toString().isEmpty()) {
                        categoria = null;
                    } else {
                        categoria = new CategoriaProduto();
                        categoria.setCategoria(txtCategoria.getSelectedItem().toString());
                        new CategoriaProdutoDAO().salvar(categoria);

                    }
                }
                produto.setCategoria(categoria);
                new ProdutoDAO().salvar(produto);
                JOptionPane.showMessageDialog(this, "Produto salvo com sucesso!");
            } catch (SQLException e) {
                Util.trataErro(e);
            }
        }
    }//GEN-LAST:event_btnSalvarActionPerformed

    private boolean valida() {
        if (txtDescricao.getText().isEmpty()) {
            JOptionPane.showMessageDialog(this, "A Descrição do produto é obrigatória!");
            txtDescricao.requestFocus();
            return false;
        }
        if (txtPrecoVenda.getValue().compareTo(BigDecimal.ZERO) == 0 || txtPrecoVenda.getText().isEmpty()) {
            JOptionPane.showMessageDialog(this, "Valor de venda é obrigatório!");
            txtPrecoVenda.requestFocus();
            return false;
        }
        if (!txtCodBarra.getText().isEmpty()) {
            try {
                if (new ProdutoDAO().existeCodBarra(txtCodBarra.getText())) {
                    JOptionPane.showMessageDialog(this, "Código de barra já existe!");
                    txtCodBarra.requestFocus();
                    return false;
                }
            } catch (SQLException ex) {
                Util.trataErro(ex);
            }
        }
        return true;
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnSalvar;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSeparator jSeparator2;
    private javax.swing.JLabel lblCategoria;
    private javax.swing.JLabel lblCodBarra;
    private javax.swing.JLabel lblDescricao;
    private javax.swing.JLabel lblMarca;
    private javax.swing.JLabel lblPrecoCusto;
    private javax.swing.JLabel lblPrecoVenda;
    private javax.swing.JLabel lblTitulo;
    private siscom.componentes.AutoCompleteComboBox txtCategoria;
    private siscom.componentes.SisTextField txtCodBarra;
    private siscom.componentes.SisTextField txtDescricao;
    private siscom.componentes.AutoCompleteComboBox txtMarca;
    private siscom.componentes.SisCampoValor txtPrecoCusto;
    private siscom.componentes.SisCampoValor txtPrecoVenda;
    // End of variables declaration//GEN-END:variables
}
